<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

    <script>
        /* //====================================================== push 加最后一项
           let arrPush = [10, 20, 30]
           let res = arrPush.push(666, { name: '张三' })
           // let res = [100,...arrPush]  //原生ES6展开运算符
           console.log(res); // (5) [10, 20, 30, 666, {…}] */

        /*  //======================================================  pop 删最后一项
            let arrPop = [10, 20, 30]
            let res = arrPop.pop()
            console.log(arrPop, res); */

        /*  //====================================================== unshift 加第一项
            let arrUnshift = [10, 20, 30];
            let res = arrUnshift.unshift('123');
            console.log(arrUnshift, res); //(4) ["123", 10, 20, 30] */

        /*  //====================================================== shift 删第一项
         let arr = [10, 20, 30];
         let res = arr.shift();
         console.log(res);// 10
         console.log(arr);// (2) [20, 30] */

        //  ======================================================  splice 增改删
        // splice 删除
        // 实现数组的增加、删除、修改
        // @params  n,m 都是数字，从索引n开始m个元素(m不写，是到删除到末尾)
        // @return   把删除的部分用新数组储存起来返回

        // let arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];

        //删除
        // let res = arr.splice(0);// 一个都不删除，复制一份
        // let res = arr.splice(arr.length - 1);//删除最后一项
        // let res = arr.splice(0, 1);//删除第一项
        // let res = arr.splice(3, 4, '哈哈哈');  //从索引第3项开始，删除4项，用"哈哈哈" 代替 删除部分  arr 现在的 (7) [10, 20, 30, "哈哈哈", 80, 90, 100]
        // 增加
        // let res = arr.splice(3, 0, '哈哈哈'); //从索引第3项开始，删除0项，把'哈哈哈' 放在索引3的位置前面 ； arr 现在的 (11) [10, 20, 30, "哈哈哈", 40, 50, 60, 70, 80, 90, 100]
        // 向数组末尾追加 一项
        // let res = arr.splice(arr.length, 0, 'AAA')
        //向数组前面追加 一项
        // let res = arr.splice(0, 0, 'BBB')

        // console.log('res 删除的', res);
        // console.log('arr 现在的', arr);

        // ======================================================  slice查询、拼接
        // slice : 实现数组的查询
        // @params 
        // 	n,m 都是数字，从索引n开始，找到索引为m的地方(不包含m这一项)
        // @return 
        // 	把找到的内容以一个新的数组的形式返回

        //  let arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100];
        //  let res = arr.slice(1, 3) 
        //  let res = arr.slice(0, 4)  //不包括索引为4的项  //res: (4) [10, 20, 30, 40]
        //  let res = arr.slice(2) //从索引2开始找到末尾，包括索引 2的项
        //  let res = arr.slice(0) // 数组克隆
        //  let res = arr.slice(-3)   //从后往前找 几项   res: (3) [80, 90, 100]
        //  let res = arr.slice(4,3) // n大于m ，返回空数组 找不到
        //  let res = arr.slice('haha') // 非有效数组，返回数组本身
        //  let res = arr.slice(11) // 比最大索引还大，返回空数组
        //  console.log('res:', res);

        // ======================================================  concat拼接
        //     slice : 实现数组拼接
        // @params 
        //     多个任意类型值
        // @return 
        //     拼接后的新数(原来数组不变)

        // let arr1 = [10, 20, 30, null]
        // let arr2 = [40, 50, 60, '哈哈']
        // // let arr = arr1.concat(arr2) //(8) [10, 20, 30, null, 40, 50, 60, "哈哈"]
        // let arr = arr1.concat() //克隆  //(4) [10, 20, 30, null]
        // console.log(arr);

        // ======================================================  toString 把数组转为字符串
        //   toString : 把数组转为字符串
        // @params
        // @return
        //     转换后的字符串，每一项用逗号分隔(原来数组不变)

        // let arr1 = [10, 20, 30, null]
        // let arr2 = [40, 50, 60, '哈哈']

        // console.log(arr1.toString());
        // console.log(arr2.toString());

        // ======================================================  join 把数组转为字符串
        //   join : 把数组转为字符串
        // @params
        //   指定的分隔符(字符串格式)
        // @return
        //   转换后的字符串  (原来数组不变)

        // let arr = [10, 20, 30, 40]
        // let res = arr.join('++++') //10++++20++++30++++40
        // let res = arr.join('') // 10203040
        // let res = arr.join('|') // 10203040
        // let res = arr.join() // 10,20,30,40

        /* let res = arr.join("+") // 10+20+30+40
           console.log(eval(res));// 把字符串变为js表达式 */

        // console.log(res);

        // ======================================================  indexOf / lastIndexOf检测数组中包含某一项
        //   indexOf : 检测当前项在数组中第一次或者最后一次出现位置的索引值
        // @params
        //   指定的分隔符(字符串格式)
        // @return
        //   转换后的字符串  (原来数组不变)

        // let arr1 = [40, 50, 60, '哈哈', 40];
        // let res = arr1.indexOf('哈哈'); //3  //验证 '哈哈' 在不在数组里面  
        // let res = arr1.indexOf('哈') // -1   //验证 '哈' 在不在数组里面  
        // ES6 提供的新方法 includes  
        // let res = arr1.includes('哈哈') //true  //验证 '哈哈' 包含不包含在数组里面  
        // let res = arr1.lastIndexOf(40) //4  //验证 40 从后面往前面找  第几项

        // console.log(res); //3


        // ======================================================  reverse /  数组的排序 
        //   reverse : 把数组倒过来
        // @params
        // @return
        //   排列后的数组

        // let arr1 = [40, 50, 60, '哈哈', 40]; //(5) [40, "哈哈", 60, 50, 40]
        // let res = arr1.reverse(arr1)
        // console.log(res);

        // ======================================================  sort /  数组的排序 
        //   sort : 实现数组的排序
        // @params
        //    可以没有，也可以是个函数
        // @return
        //   排列后的新数组
        //   原来数组改变
        // sort 方法如果不传递参数，是无法处理10以上的数字排序()
        // 想要实现多位数正常排序，需要给SORT传递一个函数，函数中返回a-b 实现升序，返回b-a 实现降序

        /*
            let arr1 = [4, 8, 6, 7, 11, 13, 16, 25, 9];
            let res = arr1.sort((a, b) => {
                // a b 是相邻的两项
                // return a - b;// 由小到大
                return b - a;// 由大到小
            })
            console.log(res);
            */

        // ======================================================  forEach / 数组遍历
        // forEach  map  filter  find  reduce  some every 

        /*         let arr1 = [4, 8, 6, 7, 11];
                // 数组中有多少项，函数就会默认执行多少次
                // 每一次执行函数：item是数组中当前要操作的这一项，index是当前项的索引

                arr1.forEach((item, index) => {
                    console.log(index, item);
                }); */

        // ======================================================  数组去重


        // let arr1 = [4, 8, 7, 4, 6, 7, 6, 9, 8];
        // let newArr = [];
        // 方法1：
        /* arr1.forEach((item) => {
            //函数体里面遇到return  下面的方法不执行了
            if (newArr.includes(item)) { return };
            newArr.push(item)
        }); */
        // 方法2：
        /* for (let i = 0; i < arr1.length; i++) {
            // 循环获取原数组中的每一项
            let item = arr1[i]
            // 如果新数组包含 这一项 不继续执行下面
            if (newArr.includes(item)) {
                continue;
            }
            // 如果新数组 不包含这一项，则添加到里面去
            newArr.push(item)
        } */

        // console.log(newArr);

        // 先分别拿出数组中的每一项；
        // 用这一项 和 '它后面的每项' 依次进行比较，如果遇到和当前项A相同的，则在原来数组中把这一项移除掉

        /*  let arr1 = [4, 8, 7, 4, 6, 7, 6, 9, 8, 9, 8, 7, 6, 4, 4, 8, 8];
                for (let i = 0; i < arr1.length; i++) {
                    // item 每一次循环拿出来的当前项
                    // i 当前项的索引 i+1 : 代表后一项
                    let item = arr1[i]
                    // var itemBack = arr1.slice(i + 1);
                    //让当前项和后面的每一项进行比较
                    for (let j = i + 1; j < arr1.length; j++) {
                        // compare: 后面拿出来要比较的每一项
                        var compare = arr1[j];
                        // 如果compare 和item相等，说明这一项是重复的，我们把她删掉
                        if (compare === item) {
                            // j 索引 这一项要从数组中移除
                            arr1.splice(j, 1);
                            // 数组塌陷 问题
                            // 删除当前一项 ，后面的每一项的索引都要提前一位
                            j -= 1;
                        }
                    }
                }
                console.log(arr1); */


        /* let arr1 = [4, 8, 7, 4, 6, 7, 6, 9, 8, 9, 8, 7, 6, 4, 4, 8, 8];
        for (let i = 0; i < arr1.length; i++) {
            for (let j = i + 1; j < arr1.length; j++) {
                if (arr1[j] === arr1[i]) {
                    arr1.splice(j, 1);
                    j -= 1;
                }
            }
        }
        console.log(arr1);*/











    </script>

</body>

</html>